package controller

import (
	model "carmanager/models"
	"carmanager/models/dto"
	"carmanager/server"
	"carmanager/util"
	"fmt"
	"strconv"
	"strings"

	"github.com/gin-gonic/gin"
	"github.com/gin-gonic/gin/binding"
)

// /车位管理
type UserController struct {
	server server.UserService
}

func NewUserController() UserController {
	return UserController{
		server: server.UserService{},
	}
}

func (r *UserController) List(ctx *gin.Context) {

	var json dto.PageParms
	// 将request的body中的数据，自动按照json格式解析到结构体
	var user model.User
	if err := ctx.ShouldBindBodyWith(&json, binding.JSON); err != nil {
		fmt.Print(err)
		util.Error(ctx, int(util.ApiCode.FAILED), "参数错误")
		return
	}
	if err := ctx.ShouldBindBodyWith(&user, binding.JSON); err != nil {
		fmt.Print(err)
		util.Error(ctx, int(util.ApiCode.FAILED), "参数错误")
		return
	}
	fmt.Println(user)
	util.Success(ctx, r.server.GetList(user, json))
}

func (r *UserController) Del(ctx *gin.Context) {
	idQuery := ctx.DefaultQuery("id", "")
	if strings.EqualFold(idQuery, "") {
		util.Error(ctx, int(util.ApiCode.FAILED), "参数错误!!")
		return
	}
	var id int
	var err error
	if id, err = strconv.Atoi(idQuery); err != nil {
		util.Error(ctx, int(util.ApiCode.FAILED), "参数错误!!")
		return
	}

	fmt.Println(id)
	if r.server.Del(id) {
		util.Error(ctx, int(util.ApiCode.FAILED), "删除失败 请稍后在试!")
		return
	}

	util.Success(ctx, "删除成功")

}

func (r *UserController) Update(ctx *gin.Context) {

	var json model.User
	// 将request的body中的数据，自动按照json格式解析到结构体

	if err := ctx.ShouldBindJSON(&json); err != nil {
		fmt.Print(err)
		util.Error(ctx, int(util.ApiCode.FAILED), "参数错误")
		return
	}

	if r.server.Update(json) {
		util.Error(ctx, int(util.ApiCode.FAILED), "修改失败")
		return
	}

	util.Success(ctx, "修改成功")
}

func (r *UserController) Add(ctx *gin.Context) {

	var json model.User
	// 将request的body中的数据，自动按照json格式解析到结构体

	if err := ctx.ShouldBindJSON(&json); err != nil {
		fmt.Print(err)
		util.Error(ctx, int(util.ApiCode.FAILED), "参数错误")
		return
	}
	json.PassWord = util.EncryMd5(json.PassWord)
	if r.server.Add(json) {
		util.Error(ctx, int(util.ApiCode.FAILED), "修改失败")
		return
	}

	util.Success(ctx, "修改成功")
}

func (r *UserController) GetUserInfo(ctx *gin.Context) {
	idQuery := ctx.DefaultQuery("id", "")
	if strings.EqualFold(idQuery, "") {
		util.Error(ctx, int(util.ApiCode.FAILED), "参数错误!!")
		return
	}
	var id int
	var err error
	if id, err = strconv.Atoi(idQuery); err != nil {
		util.Error(ctx, int(util.ApiCode.FAILED), "参数错误!!")
		return
	}
	util.Success(ctx, r.server.GetUserInfo(id))
}
